package com.swanclouds.api;

import com.swanclouds.model.account.builder.BMC.BMCCreateAccountBuilder;
import com.swanclouds.model.account.builder.BMC.BMCCreateRoleBuilder;
import com.swanclouds.model.account.builder.BMC.BMCUpdateRoleBuilder;
import com.swanclouds.model.account.builder.HuaWei.HuaWeiAccountCreateBuilder;
import com.swanclouds.model.account.builder.LdapControllerBuilder;
import com.swanclouds.model.account.builder.LdapGroupBuilder;
import com.swanclouds.model.account.builder.UpdateAccountBuilder;
import com.swanclouds.model.identity.builder.AuthStoreBuilder;
import com.swanclouds.model.managers.VirtualMediaVmmControl;
import com.swanclouds.model.managers.builder.BMC.UpdateEthernetInterfacesBuilder;
import com.swanclouds.model.managers.builder.BMC.UpdateKvmServiceBuilder;
import com.swanclouds.model.systems.builder.BIOSAttributeBuilder;
import com.swanclouds.model.systems.builder.Oem.BMC.BMCCreateVolumeBuilder;
import com.swanclouds.model.systems.builder.Oem.HuaWei.HuaWeiCreateVolumeBuilder;
import com.swanclouds.redfish.account.domain.LdapControllerConcrete;
import com.swanclouds.redfish.account.domain.LdapGroupConcrete;
import com.swanclouds.redfish.account.domain.Oem.BMC.role.BMCCreateUserGroupConcrete;
import com.swanclouds.redfish.account.domain.Oem.BMC.role.BMCUpdateUserGroupConcrete;
import com.swanclouds.redfish.account.domain.Oem.BMC.user.BMCCreateAccountContrete;
import com.swanclouds.redfish.account.domain.Oem.BMC.user.BMCUpdateAccountConcrete;
import com.swanclouds.redfish.account.domain.Oem.HuaWei.HuaWeiCreateAccountConcrete;
import com.swanclouds.redfish.account.domain.Oem.HuaWei.HuaWeiUpdateAccountConcrete;
import com.swanclouds.redfish.common.redfish.EthernetInterfacesUpdate;
import com.swanclouds.redfish.common.redfish.KVM;
import com.swanclouds.redfish.identity.RedfishAuth;
import com.swanclouds.redfish.managers.domain.VirtualMediaVmmControlModel;
import com.swanclouds.redfish.systems.domain.BIOSAttributeConcrete;
import com.swanclouds.redfish.systems.domain.Oem.BMC.BMCCreateVolumeConcrete;
import com.swanclouds.redfish.systems.domain.Oem.HuaWei.HuaWeiCreateVolumeConcrete;

/**
 * @author 张立强
 *
 */
public class Builders {

    public static AuthStoreBuilder auth() {
        return RedfishAuth.builder();
    }
    /**
     * 构建Oem.BMC 创建逻辑盘
     * @return BMCCreateVolumeBuilder
     */
    public static BMCCreateVolumeBuilder volumeBMC() {
        return BMCCreateVolumeConcrete.builder();
    }

    /**
     * 构建Oem.Huawei 创建逻辑盘
     * @return HuaWeiCreateVolumeBuilder
     */
    public static HuaWeiCreateVolumeBuilder volumeHuaWei() {
        return HuaWeiCreateVolumeConcrete.builder();
    }

    /**
     * 编译BIOS
     * @return BIOSAttributeBuilder
     */
    public static BIOSAttributeBuilder biosAttribute() {
        return BIOSAttributeConcrete.builder();
    }

    /**
     * 构建Oem.BMC 创建用户
     * @return BMCCreateAccountBuilder
     */
    public static BMCCreateAccountBuilder createAccountBMC() {
        return BMCCreateAccountContrete.builder();
    }

    /**
     * 构建Oem.Huawei 创建用户
     * @return HuaWeiAccountCreateBuilder
     */
    public static HuaWeiAccountCreateBuilder createAccountHuaWei() {
        return HuaWeiCreateAccountConcrete.builder();
    }

    /**
     * 更新 Oem.BMC 用户
     * @return UpdateAccountBuilder
     */
    public static UpdateAccountBuilder updateAccountBMC() {
        return BMCUpdateAccountConcrete.builder();
    }

    /**
     * 更新 Oem.Huawei 用户
     * @return UpdateAccountBuilder
     */
    public static UpdateAccountBuilder updateAccountHuaWei() {
        return HuaWeiUpdateAccountConcrete.builder();
    }

    /**
     * 新建 用户组(角色)
     * @return IBMCRoleBuilder
     */
    public static BMCCreateRoleBuilder roleCreateBMC() {
        return BMCCreateUserGroupConcrete.builder();
    }
    /**
     * 更新 用户组(角色)
     * @return BMCUpdateRoleBuilder
     */
    public static BMCUpdateRoleBuilder roleUpdateBMC() {
        return BMCUpdateUserGroupConcrete.builder();
    }

    /**
     * 更新 域控制器  因为文档没有说明必传参数，导致报412问题
     * @return the Ldap Controller
     */
    @Deprecated
    public static LdapControllerBuilder ldapController() {
        return LdapControllerConcrete.builder();
    }

    /**
     * 更新 Ldap Group
     * @return the Ldap Group
     */
    public static LdapGroupBuilder ldapGroup() {
        return LdapGroupConcrete.builder();
    }

    /**
     * 更新 以太网接口
     * @return EthernetInterfacesUpdate
     */
    public static UpdateEthernetInterfacesBuilder updateEthernetInterfaces(){
        return EthernetInterfacesUpdate.builder();
    }

    /**
     * 更新 KVM Service
     * @return KVM
     */
    public static UpdateKvmServiceBuilder updateKvmServiceBuilder(){
        return KVM.builder();
    }

    /**
     * 虚拟服务器更新连接状态
     * @return VirtualMediaVmmControlModel
     */
    public static VirtualMediaVmmControl virtualMediaVmmControl(){
        return VirtualMediaVmmControlModel.builder();
    }
}
